The present invention pertains to the field of integrated circuit (IC) design. More particularly, this invention relates to the art of synthesizing clock tree solutions.
Since the advent of the integrated circuit (IC), circuit components have become smaller and smaller. An IC may include millions of components packed into an incredibly small package. With each new generation of smaller integration, more functionality, and therefore more value, can be derived from ICs. Reliably manufacturing these highly integrated ICs, however, presents significant design challenges.
In particular, designing ICs that meet timing constraints can be particularly difficult. An IC may include tens of thousands of registers that need to be connected to one or more clock sources. For each clock xe2x80x9ctickxe2x80x9d, or clock transition, thousands of registers have to operate in concert. A complex network is needed to propagate the clock signal to each of the registers. If the difference in propagation delay through two different paths in the network is too large or too small, errors may occur that can cause the entire IC to fail.
Those skilled in the art will be familiar with numerous processes for synthesizing clock networks, or clock tree solutions. One of the most common approaches is a binary clock tree. A binary clock tree often begins by coupling registers into pairs. Then, pairs of register pairs are coupled together, pairs of pairs of register pairs are coupled together, and so on until the clock source, commonly referred to as the xe2x80x9crootxe2x80x9d or root node, is reached.
The result is a clock tree having a root and a series of branches reaching out to the registers. The registers are commonly referred to as xe2x80x9cleaf nodesxe2x80x9d on the tree. Between the root and the leaf nodes there may be several levels of intermediate nodes where paths branch.
Each register and each path adds a certain amount of load to the tree. The root usually cannot drive enough current into the tree to operate the cumulative load. In order to handle large trees, buffers are inserted into the tree at various intermediate nodes. Buffers receive a signal from an upstream driver, such as another buffer or the root node, and drive the signal to a number of down stream nodes.
A wide variety of approaches have been used to insert buffers in clock trees. For instance, the number of nodes coupled to a root may be counted, and one or more buffers inserted as needed. Then, each buffer can be treated like a root in a xe2x80x9csub-tree,xe2x80x9d and nodes can be counted and buffers inserted to create further sub-trees in a hierarchy that reaches out to the leaf nodes. Various design constraints can be tested, and the process repeated with different types of buffers and tree structures until a suitable solution is found.
As ICs continue to become more complex, having tens of thousand of registers which may be clocked by several different source clocks, at several different clock frequencies, through gated clocks, inverted clocks, etc., the processing time and expense required to meet continually more stringent design constraints using known approaches is becoming increasingly prohibitive.
Therefore, an improved method and apparatus for synthesizing clock tree solutions is needed.
The present invention beneficially provides an improved method and apparatus for synthesizing clock tree solutions. At a particular level of a clock tree in a circuit description, balanced cluster sets of nodes are calculated based on a set of available buffer types. Each balanced cluster set is tested to see if it meets a design constraint. If the design constraint is not met for a particular balanced cluster set, the particular cluster set is removed from consideration in the clock tree solution. For the cluster sets that do meet the design constraint, a cost associated with each cluster set is calculated. A balanced cluster set that has the lowest cost is selected for the clock tree solution.
In one embodiment, the lowest cost balanced cluster set for one level in the clock tree forms the nodes for the next higher level in the clock tree, and the process is repeated at each level of the clock tree up to a root node. In another embodiment, the entire clock tree is tested to see if it meets a second design constraint. In another embodiment, the clock tree is tested for setup time and/or hold time violations, and register positions within the clock tree are changed to eliminate any violations. In another embodiment, the clock tree in the circuit description is modified with the lowest cost balanced cluster set for each level of the clock tree solution, wherein each cluster includes the buffer on which the cluster calculation was based.